package com.sloth.bear.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.sloth.bear.dto.base.ResponsePage;
import com.sloth.bear.dto.entity.FileIndex;
import com.sloth.bear.dto.request.FileQueryRequest;
import com.sloth.bear.dto.request.VideoProgressRequest;
import com.sloth.bear.dto.vo.FileIndexVO;

/**
 * 文件索引服务接口
 */
public interface FileIndexService extends IService<FileIndex> {
    
    /**
     * 分页查询文件索引
     */
    ResponsePage<FileIndexVO> listFile(FileQueryRequest request);

    /**
     * 扫描指定目录下的文件
     */
    void scanDirectory(String directory);
    
    /**
     * 扫描所有配置的目录
     */
    void scanAllDirectories();
    
    /**
     * 添加文件到索引
     */
    void addFileToIndex(String filePath);
    
    /**
     * 从索引中移除文件
     */
    void removeFileFromIndex(String filePath);
    
    /**
     * 刷新缓存
     */
    void refreshCache();
    
    /**
     * 获取扫描统计信息
     */
    String getScanStatistics();
    
    /**
     * 根据ID获取文件详情
     */
    FileIndexVO getFileDetail(Long id);
    
    /**
     * 随机获取一个视频文件
     */
    FileIndexVO getRandomVideo();

    /**
     * 保存视频播放进度
     */
    void saveVideoProgress(VideoProgressRequest request);

    /**
     * 刮削所有视频文件的元数据（封面、标题等）
     */
    void scrapeAllVideos();

    /**
     * 批量恢复已删除的文件记录
     * 检查已删除的记录，如果文件在磁盘上存在，则恢复记录
     */
    void restoreDeletedFiles();

    /**
     * 清理已删除的文件记录
     * 物理删除所有标记为 deleted=1 的记录
     */
    void cleanDeletedFiles();

    /**
     * 强制全量刷新
     * 重新扫描所有配置的目录，按文件修改时间从新到旧扫描
     * 不删除现有记录，只添加新文件和更新已有文件
     */
    void forceFullRefresh();
}